package 排序;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 商品服务类，负责商品相关的业务逻辑
 * 支持数据持久化到文件
 */
public class ProductService {
    private Map<String, Product> products;
    private static final String DATA_FILE = "products.dat";

    public ProductService() {
        products = new HashMap<>();
        // 首先尝试从文件加载数据
        loadData();

        // 如果文件不存在或为空，则初始化示例数据
        if (products.isEmpty()) {
            initializeProducts();
        }
    }

    private void initializeProducts() {
        products.put("001", new Product("001", "iPhone 14", 5999.00, 10));
        products.put("002", new Product("002", "华为 Mate 50", 4999.00, 8));
        products.put("003", new Product("003", "小米 13", 3999.00, 15));
        products.put("004", new Product("004", "三星 Galaxy S23", 5299.00, 5));
        products.put("005", new Product("005", "iPad Air", 4399.00, 12));
        System.out.println("已初始化示例商品数据");
    }

    /**
     * 保存商品数据到文件
     */
    public void saveData() {
        try (ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(DATA_FILE))) {
            oos.writeObject(products);
            System.out.println("商品数据已保存到文件: " + DATA_FILE);
        } catch (IOException e) {
            System.out.println("保存商品数据失败: " + e.getMessage());
        }
    }

    /**
     * 从文件加载商品数据
     */
    @SuppressWarnings("unchecked")
    public void loadData() {
        File file = new File(DATA_FILE);
        if (!file.exists()) {
            System.out.println("数据文件不存在，将使用默认数据");
            return;
        }

        try (ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream(DATA_FILE))) {
            products = (Map<String, Product>) ois.readObject();
            System.out.println("已从文件加载商品数据: " + DATA_FILE);
            System.out.println("加载了 " + products.size() + " 个商品");
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("加载商品数据失败: " + e.getMessage());
            // 如果加载失败，重新初始化一个空的Map
            products = new HashMap<>();
        }
    }

    public List<Product> getAllProducts() {
        return new ArrayList<>(products.values());
    }

    public Product findProductById(String productId) {
        return products.get(productId);
    }

    // 添加商品管理方法
    public void addProduct(Product product) {
        products.put(product.getId(), product);
        // 添加商品后自动保存
        saveData();
    }

    public boolean removeProduct(String productId) {
        boolean removed = products.remove(productId) != null;
        if (removed) {
            // 删除商品后自动保存
            saveData();
        }
        return removed;
    }

    /**
     * 更新商品库存（用于购物车购买后更新库存）
     */
    public void updateProductStock(String productId, int newStock) {
        Product product = products.get(productId);
        if (product != null) {
            product.setStock(newStock);
            // 更新库存后自动保存
            saveData();
        }
    }
}
